﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Domain.User
{
    /// <summary>
    /// 单据编码规则实体（用于存储图二的编码规则配置）
    /// </summary>
    [Table("documentcoderule")] // 数据库表名
    public class DocumentCodeRule : AuditEntity // 假设你有基础审计实体AuditEntity，包含CreateTime、CreaterPeople等字段
    {
        /// <summary>
        /// 业务实体标识（关联SysMenu的BusinessEntity，如“ProductionOrder”）
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string BusinessEntity { get; set; }

        /// <summary>
        /// 规则名称
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string RuleName { get; set; }

        /// <summary>
        /// 单据字段（关联EntityFieldConfig的FieldName，如“ProduceCode”）
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string EntityField { get; set; }

        /// <summary>
        /// 日期排序字段（如“CreateTime”）
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string DateField { get; set; }

        /// <summary>
        /// 前缀（如“ZL”）
        /// </summary>
        [Required]
        [MaxLength(20)]
        public string Prefix { get; set; }

        /// <summary>
        /// 规则类型（年、年月、年月日、无）
        /// </summary>
        [Required]
        [MaxLength(10)]
        public string RuleType { get; set; }

        /// <summary>
        /// 编号位数
        /// </summary>
        [Required]
        public int NumberDigits { get; set; }

        /// <summary>
        /// 增长类型（每天从1开始、累计自增等）
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string GrowthType { get; set; }

        /// <summary>
        /// 连接符号（如“-”）
        /// </summary>
        [MaxLength(5)]
        public string Connector { get; set; }

        /// <summary>
        /// 编码预览（仅用于展示，不持久化）
        /// </summary>
        [NotMapped] // 表示该字段不映射到数据库
        public string CodePreview { get; set; }
    }
}
